const path = require("path");
const express = require("express");
// 导入express-session模块
const session = require("express-session");
// 引入body-parser模块，用于处理POST请求参数
const bodyParser = require("body-parser");
// 导入morgan
const morgan = require('morgan')
// 导入dateformat模块
const dateFormat = require('dateformat');
// 导入art-template模板引擎
const template = require('art-template')
// 配置art-template模板引擎全局过滤器
template.defaults.imports.dateFormat = dateFormat;

// 导入配置config模块
const config = require('config')
console.log(config.get('title'))

const app = express();

// 设置静态资源路径
app.use(express.static(path.join(__dirname, "public")));

// 配置body-parser extended:false表示使用系统自带的querystring模块处理参数格式，如果为true，则使用qs第三方模块处理。推荐为false
app.use(bodyParser.urlencoded({ extended: false }));

app.use(
  session({
    secret: "secret key",
    saveUninitialized: false,
    cookie: {
      maxAge: 24 * 60 * 60 * 1000, // 设置cookie过期时间，单位为毫秒单位
    },
  })
);

// 告诉框架模板路径在哪里
app.set("views", path.join(__dirname, "views"));
// 设置模板引擎
app.set("view engine", "art");
// 配置模板引擎
app.engine("art", require("express-art-template"));

// 链接数据库
require("./models/connect");

// 拦截以/admin开头的路由，做登录拦截
app.use("/admin", require('./middleware/loginGuard'));

// 获取环境变量
if(process.env.NODE_ENV === 'development') {
  // console.log('开发环境')
  // 开发环境打印请求log
  // 在开发环境中，将客户端发送到服务器端的请求信息打印到控制台中
  app.use(morgan('dev'))
} else if(process.env.NODE_ENV === 'production') {
  console.log('生产环境')
}

// 导入路由
const home = require("./routes/home");
const admin = require("./routes/admin");
// 使用路由
app.use("/home", home);
app.use("/admin", admin);

// 错误拦截
app.use((err, req, res, next) => {
  const error = JSON.parse(err);
  const params = [];
  for(let key in error) {
    if(key !== 'path') {
      params.push(key + '=' + error[key])
    }
  }
  res.redirect(`${error.path}?${params.join('&')}`);
})

app.listen(81, () => {
  console.log("server started on port 81");
});
